home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 3 / Light ROM 3 - Disc 2.iso / programs / amiga / macromkr / rexxscri.lha / REXXscripts / ZoomIn.rexx < prev   
OS/2 REXX Batch file  |  1993-07-27  |  4KB  |  108 lines

  1. /*   ZoomIn.rexx   */
  2. /* --------------- */
  3. /* July 27th, 1993 */
  4.  
  5. /*
  6.  * Takes the primary buffer and generates "frames" number of zoomed
  7.  * output frames of the same, or user specifed resolution. Can
  8.  * zoom to the center of the image or a user-specified pixel location,
  9.  * or, it can PAN along a linear path while zooming (we were going to
  10.  * make it pan along a spline, but we'll leave that "as an exercise
  11.  * for the student" the way the textbooks do when something's too hard
  12.  * for them to do themselves. :^) Does not produce an output frame that
  13.  * is at -0- zoom; you already have that, so why waste the time?
  14.  * You must have memory available to hold the zoomed frame, it
  15.  * (teporarily) exists as a second buffer inside Imagemaster or
  16.  * Imagemaster R/t.
  17.  *
  18.  * The more frames you specify, the smoother the zoom will be.
  19.  */
  20.  
  21. /*
  22.  *  1 - Modify the "Set These" parameters below to suit your fancy
  23.  *  2 - Place this script in the RXPI: assignment
  24.  *  3 - Start Imagemaster
  25.  *  4 - Load the image you want to zoom as primary
  26.  *  5 - Go to a shell and type "RX RXPI:ZOOMIN"
  27.  *  6 - Zoomed frames are generated to path:file.framenumber in 24bit IFF
  28.  *  7 - Do what you want with the output
  29.  */
  30.  
  31. /* Set these as you prefer */
  32. /* ----------------------- */
  33. frames = 5;     /* total zooms to produce (not counting unzoomed) */
  34. maxzoom = 1000; /* maximum zoom to reach in last frame            */
  35.  
  36. o_flag = 'NOMATCH'; /* MATCH or NOMATCH */
  37. o_x = 160; /* to set custom output size, change o_flag from MATCH to NOMATCH */
  38. o_y = 120; /* otherwise will match input image size exactly */
  39.  
  40. c_flag = 'PAN'; /* CENTER, CUSTOM, or PAN */
  41. c_xs =  10; /* for a "hard" center, change c_flag to CUSTOM, set c_xs, c_ys */
  42. c_ys =  10; /* for a zoom around the center, change c_flag to CENTER        */
  43. c_xe = 630; /* If you want the zoom to pan, change the c_flag to PAN and... */
  44. c_ye = 470; /* ...set c_xs, c_ys, c_xe and c_ye variables start and end.    */
  45.  
  46. fpath = 'ram:';
  47. fname = 'zoom_frame';
  48.  
  49. /* ------------------------------------ */
  50. /* !!! leave stuff below here alone !!! */
  51. /* ------------------------------------ */
  52. if frames = 0 then do
  53.   say "Sorry! You can't zoom ZERO frames!";
  54.   exit 0;
  55.   end;
  56. zoomfraction = maxzoom / frames;
  57. address 'IM_Port';
  58. 'imagepath "'||fpath'"';
  59. do i=1 to frames
  60.   say 'Generating Frame #'||i;
  61.   options results;    /* Tell IM that we want answers to our functions */
  62.   'current';          /* ask about current buffer */
  63.   bufinfo = result;
  64.   parse var bufinfo bname ',' bnum ',' xd ',' yd ',' size ',' mem ',' pname ',' pnum;
  65.   if o_flag = 'match' then do /* matched output size */
  66.     xs = xd; ys = yd;
  67.     end;
  68.   else do /* specified output size */
  69.     xs = o_x; ys = o_y;
  70.     end;
  71.   if c_flag = 'CENTER' then do
  72.     xc = xd/2; yc = yd/2;            /* zoom to center */
  73.     end;
  74.   else do
  75.     xc = c_xs; /* assumes c_flag = CUSTOM */
  76.     yc = c_ys;
  77.     if c_flag = 'PAN' then do
  78.       if c_xs > c_xe then do
  79.         xc = c_xs - (((c_xs - c_xe) / frames) * i);
  80.         end;
  81.       else do
  82.         xc = c_xs + (((c_xe - c_xs) / frames) * i);
  83.         end;
  84.       if c_ys > c_ye then do
  85.         yc = c_xs - ((c_ys - c_ye) / frames) * i);
  86.         end;
  87.       else do
  88.         yc = c_ys + (((c_ye - c_ys) / frames) * i);
  89.         end;
  90.       end;
  91.     else do
  92.       end;
  93.     end;
  94.   zoomfactor = zoomfraction * i;
  95.   parse var zoomfactor zoomfactor '.' junk; /* int(x) */
  96.   parse var xc xc '.' junk; /* int(x) */
  97.   parse var yc yc '.' junk; /* int(x) */
  98.   zbname = fname||'.'||i;
  99.   'zoomclip' zoomfactor zoomfactor xc yc zbname xs ys;
  100.   newbuf = result;                       /* buffer number of new clip */
  101.   options;                               /* no more results */
  102.   'save' newbuf;                         /* save the zoom frame */
  103.   'killbuff' newbuf;                     /* get rid of output frame */
  104.   say '  ....frame "'||fpath||fname||'.'||i||'" written!';
  105.   end;
  106.  
  107. 'finish'; /* inform IM we're done */
  108.